#include "key.h"
#include "system_cw32l010.h"
#include "cw32l010_gpio.h"
#include "ssd1306.h"
#include "rda5807m.h"
#include "cw32l010_systick.h"
key_t key_info;
void KEY_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.IT = GPIO_IT_FALLING;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;
    GPIO_InitStruct.Pins = KEY1 | KEY2 | KEY3 | KEY4 | KEY5;
    GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);
    // 配置中断滤波
    // GPIO_ConfigFilter(CW_GPIOB, bv2 | bv3 | bv4 | bv5 | bv6, GPIO_FLTCLK_HCLK8);
    GPIO_ConfigFilter(CW_GPIOB, bv2 | bv3 | bv4 | bv5 | bv6, GPIO_FLTCLK_LSI);
    // 清除中断标志并使能NVIC
    GPIOA_INTFLAG_CLR(bv2 | bv3 | bv4 | bv5 | bv6);
    NVIC_EnableIRQ(GPIOB_IRQn);
}

void GPIOB_IRQHandlerCallback(void)
{
    // key1
    if (CW_GPIOB->ISR_f.PIN4)
    {
        key_info.KEY_UP = 1;
        FirmwareDelay(480000);
        if(PB04_GETVALUE()) key_info.KEY_UP=0;
        GPIOB_INTFLAG_CLR(bv4);
    }
    // key2
    if (CW_GPIOB->ISR_f.PIN2)
    {
        key_info.KEY_RIGHT = 1;
        FirmwareDelay(480000);
        if(PB02_GETVALUE()) key_info.KEY_RIGHT=0;
        GPIOB_INTFLAG_CLR(bv2);
    }
    // key3
    if (CW_GPIOB->ISR_f.PIN5)
    {
        key_info.KEY_DOWN = 1;
        FirmwareDelay(480000);
        if(PB05_GETVALUE()) key_info.KEY_DOWN=0;
        GPIOB_INTFLAG_CLR(bv5);
    }
    // key4
    if (CW_GPIOB->ISR_f.PIN6)
    {
        key_info.KEY_LEFT = 1;
        FirmwareDelay(480000);
        if(PB06_GETVALUE()) key_info.KEY_LEFT=0;
        GPIOB_INTFLAG_CLR(bv6);
    } // key5
    if (CW_GPIOB->ISR_f.PIN3)
    {
        key_info.KEY_FUN = 1;
        FirmwareDelay(480000);
        if(PB03_GETVALUE()) key_info.KEY_FUN=0;
        GPIOB_INTFLAG_CLR(bv3);
        
    }
}

void GPIOB_IRQHandler(void)
{
    /* USER CODE BEGIN */
    GPIOB_IRQHandlerCallback();
    /* USER CODE END */
}

void KeySoft_Shake(void){
    if(key_info.KEY_DOWN)
    {
        SysTickDelay(20);
        if(PB03_GETVALUE()) key_info.KEY_DOWN=0;
    }
}
void Key_Process(void)
{
	if (key_info.KEY_LEFT)
	{
		key_info.KEY_LEFT = 0;
		RDA5807M_Search_Freq_TurnDown();
	}
	if (key_info.KEY_RIGHT)
	{
		key_info.KEY_RIGHT = 0;
		RDA5807M_Search_Freq_TurnUp();
	}
	if (key_info.KEY_UP)
	{
		key_info.KEY_UP = 0;
		fm_info.vol++;
        RDA5807M_SetVolume(fm_info.vol);
	}
	if (key_info.KEY_DOWN)
	{
		key_info.KEY_DOWN = 0;
		fm_info.vol--;
        RDA5807M_SetVolume(fm_info.vol);
	}
	
}
